home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gigarom 1
/
Gigarom Macintosh Archives (Quantum Leap)(CDRM1080320)(1993).iso
/
FILES
/
DEV
/
I-Z
/
Lex.cpt
/
Lex
/
LEXLIB.π folder
/
LEXSWI.C
< prev
next >
Wrap
Text File
|
1990-06-19
|
3KB
|
109 lines
/*
HEADER: CUG nnn.nn;
TITLE: LEX - A Lexical Analyser Generator
VERSION: 1.0 for IBM-PC
DATE: Jan 30, 1985
DESCRIPTION: A Lexical Analyser Generator. From UNIX
KEYWORDS: Lexical Analyser Generator YACC C PREP
SYSTEM: IBM-PC and Compatiables
FILENAME: LEXSWI.C
WARNINGS: This program is not for the casual user. It will
be useful primarily to expert developers.
CRC: N/A
SEE-ALSO: YACC and PREP
AUTHORS: Scott Guthery 11100 leafwood lane Austin, TX 78750
COMPILERS: DESMET-C
REFERENCES: UNIX Systems Manuals
Adapted for using THINK C in 1990, lexswitch also reads resources from
the resource fork instaed of including tables. MM 90/06/18
*/
/*
* lexswitch -- switch lex tables
*/
/*
* Bob Denny 28-Aug-82 Remove reference to stdio.h
* Scott Guthery 20-Nov-83 Adapt for IBM PC & DeSmet C
*/
#include <stdlib.h>
#include "lex.h"
#define USE_RESOURCES
extern struct lextab *_tabp;
#ifdef USE_RESOURCES
static void *
getLTABresource(SHORTINT id) {
void **h;
if(id) {
h = (void **)GetResource('LTAB', id);
if(!h) {
lexerror("can't find LTAB resource %d", id);
exit(1);
}
#ifdef DEBUG
else
printf((char *)"loading LTAB resource %d\n", id);
#endif
MoveHHi(h);
HLock(h);
return(*h);
}
return NULL;
}
#endif
/*
* we might even consider releasing the old table if inited from
* resources!! and setting llresinit to 0 again;
*
*/
struct lextab *
lexswitch(struct lextab *lp)
{
register struct lextab *olp;
#ifdef USE_RESOURCES
LEXT lext, **lextH;
void **h;
#endif
#ifdef USE_RESOURCES
/* now check or it is initialized */
if(lp->llresinit == 0 && lp->llresid != 0) {
lextH = (LEXTHandle)GetResource('LEXT', lp->llresid);
if(!lextH) {
lexerror("can't find LEXT resource %d", lp->llresid);
exit(1);
}
#ifdef DEBUG
else
printf((char *)"loading LEXT resource %d\n", lp->llresid);
#endif
BlockMove(*lextH, &lext, (long)sizeof(lext));
ReleaseResource(lextH); /* release it */
lp->llfinal = getLTABresource(lext.rfinal);
lp->llnext = getLTABresource(lext.rnext);
lp->llcheck = getLTABresource(lext.rcheck);
lp->lldefault = getLTABresource(lext.rdefault);
lp->llbase = getLTABresource(lext.rbase);
lp->lllook = getLTABresource(lext.rlook);
lp->llign = getLTABresource(lext.rign);
lp->llbrk = getLTABresource(lext.rbrk);
lp->llill = getLTABresource(lext.rill);
lp->llendst = lext.nstates;
lp->llnxtmax = lext.nnext;
lp->llresinit = 1;
}
#endif
olp = _tabp;
_tabp = lp;
return(olp);
}